#Boa:Dialog:Dialog1

import wx
import wx.calendar
import wx.grid
import datetime

import consultasBD
import utiles
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1BUTTON5, wxID_DIALOG1CHECKBOX1, 
 wxID_DIALOG1COMBOBOX1, wxID_DIALOG1COMBOBOX2, wxID_DIALOG1COMBOBOX3, 
 wxID_DIALOG1COMBOBOX4, wxID_DIALOG1COMBOBOX5, wxID_DIALOG1COMBOBOX7, 
 wxID_DIALOG1DATEPICKERCTRL1, wxID_DIALOG1DATEPICKERCTRL2, wxID_DIALOG1GRID1, 
 wxID_DIALOG1PANEL1, wxID_DIALOG1RADIOBUTTON1, wxID_DIALOG1RADIOBUTTON2, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, wxID_DIALOG1STATICTEXT6, 
 wxID_DIALOG1STATICTEXT7, wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(28)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(300, 30), size=wx.Size(795, 582),
              style=wx.DEFAULT_DIALOG_STYLE,
              title='Listado Compras/Ventas por RUBRO')
        self.SetClientSize(wx.Size(787, 555))

        self.panel1 = wx.Panel(id=wxID_DIALOG1PANEL1, name='panel1',
              parent=self, pos=wx.Point(8, 8), size=wx.Size(392, 48),
              style=wx.TAB_TRAVERSAL)

        self.radioButton1 = wx.RadioButton(id=wxID_DIALOG1RADIOBUTTON1,
              label='todos', name='radioButton1', parent=self.panel1,
              pos=wx.Point(8, 0), size=wx.Size(48, 13), style=0)
        self.radioButton1.SetValue(True)
        self.radioButton1.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton,
              id=wxID_DIALOG1RADIOBUTTON1)

        self.radioButton2 = wx.RadioButton(id=wxID_DIALOG1RADIOBUTTON2,
              label='por Proveedor individual', name='radioButton2',
              parent=self.panel1, pos=wx.Point(64, 0), size=wx.Size(136, 13),
              style=0)
        self.radioButton2.SetValue(False)
        self.radioButton2.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton,
              id=wxID_DIALOG1RADIOBUTTON2)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(80, 16), size=wx.Size(64, 21),
              style=0, value='')
        self.textCtrl1.Enable(False)
        self.textCtrl1.Bind(wx.EVT_KILL_FOCUS, self.OnKillProveedor1)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self.panel1, pos=wx.Point(144, 16), size=wx.Size(240, 21),
              style=0, value='')
        self.textCtrl2.Enable(False)
        self.textCtrl2.Bind(wx.EVT_KILL_FOCUS, self.OnKillProveedor2)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='desde', name='staticText1', parent=self, pos=wx.Point(408,
              8), size=wx.Size(29, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='hasta', name='staticText2', parent=self, pos=wx.Point(488,
              8), size=wx.Size(27, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Rubro / Grupo', name='staticText3', parent=self,
              pos=wx.Point(568, 8), size=wx.Size(68, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='Tipo de reporte', name='staticText5', parent=self,
              pos=wx.Point(88, 72), size=wx.Size(74, 13), style=0)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='Sucursal', name='staticText6', parent=self,
              pos=wx.Point(568, 72), size=wx.Size(40, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(408, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.datePickerCtrl2 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL2,
              name='datePickerCtrl2', parent=self, pos=wx.Point(488, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(568, 24),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnComboRubro,
              id=wxID_DIALOG1COMBOBOX1)

        self.comboBox5 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX5,
              name='comboBox5', parent=self, pos=wx.Point(568, 48),
              size=wx.Size(176, 21), style=0, value='')
        self.comboBox5.SetLabel('')

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Operacion', name='staticText4', parent=self,
              pos=wx.Point(704, 8), size=wx.Size(49, 13), style=0)

        self.comboBox7 = wx.ComboBox(choices=["Ventas", "Compras", "Ambos"],
              id=wxID_DIALOG1COMBOBOX7, name='comboBox7', parent=self,
              pos=wx.Point(704, 24), size=wx.Size(78, 21), style=0, value='')
        self.comboBox7.SetLabel('')
        self.comboBox7.Bind(wx.EVT_COMBOBOX, self.OnCambiaOperacion,
              id=wxID_DIALOG1COMBOBOX7)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX3,
              name='comboBox3', parent=self, pos=wx.Point(88, 88),
              size=wx.Size(192, 21), style=0, value='')

        self.checkBox1 = wx.CheckBox(id=wxID_DIALOG1CHECKBOX1,
              label='Incluir N.C.', name='checkBox1', parent=self,
              pos=wx.Point(288, 88), size=wx.Size(120, 13), style=0)
        self.checkBox1.SetValue(False)

        self.comboBox4 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX4,
              name='comboBox4', parent=self, pos=wx.Point(408, 88),
              size=wx.Size(144, 21), style=0, value='')
        self.comboBox4.SetLabel('')

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='Temporada', name='staticText7', parent=self,
              pos=wx.Point(408, 72), size=wx.Size(54, 13), style=0)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX2,
              name='comboBox2', parent=self, pos=wx.Point(568, 88),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox2.SetLabel('')

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Procesar',
              name='button1', parent=self, pos=wx.Point(704, 88),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_DIALOG1BUTTON1)

        self.button5 = wx.Button(id=wxID_DIALOG1BUTTON5, label='Limpiar',
              name='button5', parent=self, pos=wx.Point(16, 528),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON5)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Imprimir',
              name='button2', parent=self, pos=wx.Point(104, 528),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(False)
        self.button2.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Exportar',
              name='button3', parent=self, pos=wx.Point(192, 528),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnExportar,
              id=wxID_DIALOG1BUTTON3)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(704, 528),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON4)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(16, 120), size=wx.Size(760, 400),
              style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.encontrado = False
        self.cargaRubros()
        self.cargaDetalles()
        self.cargarSucursales()
        self.cargarTipoOperacion()
        self.llenarComboTemporada()
        self.crearGrilla()

    def OnSalir(self, event):
        self.Close()

    def OnLimpiar(self, event):
        self.encabezado()
        self.radioButton1.SetValue(True)
        self.radioButton2.SetValue(False)
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl1.Enable(False)
        self.textCtrl2.Enable(False)
        self.textCtrl1.SetEditable(True)
        self.textCtrl2.SetEditable(True)
        self.comboBox1.SetSelection(-1)
        self.comboBox2.SetSelection(-1)
        self.comboBox4.SetSelection(-1)
        self.comboBox5.SetSelection(-1)
        self.comboBox5.Clear()
        self.comboBox7.SetSelection(0)
        self.encontrado = False
        self.button2.Enable(False)
        self.button3.Enable(False)
        self.cargaDetalles()
        self.comboBox3.SetSelection(-1)
        self.checkBox1.Show(True)
        self.checkBox1.SetLabel("Incluye N.C.")
        self.checkBox1.SetValue(False)
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.DeleteCols()
        self.grid1.AppendCols()
        self.grid1.AppendRows()
        self.radioButton1.SetFocus()
        
    def OnRadioButton(self, event):
        if self.radioButton1.GetValue():
            self.textCtrl1.Enable(False)
            self.textCtrl2.Enable(False)
        else:
            self.textCtrl1.Enable(True)
            self.textCtrl2.Enable(True)

    def OnComboRubro(self, event):
        if self.comboBox1.GetSelection()==0: 
            self.comboBox5.Clear()
            return
        rubro,idrubro = (self.comboBox1.GetLabel()).split(" / ")
        r1 = "SELECT g.idgrupo,g.nombregrupo FROM rubros r, grupos g "
        r2 = "WHERE r.idrubro='"+idrubro+"' AND r.idgrupo=g.idgrupo "
        r3 = "ORDER BY g.nombregrupo "
        sql = r1+r2+r3
        resultado = consultasBD.ordenCrudaDict(sql)
        self.comboBox5.Clear()
        for item in resultado:
            idgrupo = str(item["idgrupo"])
            nombregrupo = str(item["nombregrupo"])
            texto = nombregrupo+" / "+idgrupo
            self.comboBox5.Append(texto)
        self.comboBox5.SetEditable(False)
        
    def OnKillProveedor1(self, event):
        idproveedor = self.textCtrl1.GetLabel()
        self.buscarProveedor(idproveedor=idproveedor)
        
    def OnKillProveedor2(self, event):
        nombre = self.textCtrl2.GetLabel()
        self.buscarProveedor(nombre=nombre)
 
    def buscarProveedor(self,idproveedor="",nombre=""):
        if idproveedor == "" and nombre == "":
            return
        if self.encontrado:
            self.encontrado = False
            return

        if idproveedor != "":
            r1 = "SELECT idproveedor,nombre FROM proveedor "
            r2 = "WHERE idproveedor='"+idproveedor+"' "
            consultaSQL = r1+r2
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != ():
                proveedor = resultado[0]
                self.textCtrl1.SetLabel(proveedor["idproveedor"])
                self.textCtrl2.SetLabel(proveedor["nombre"])
                self.encontrado = True
                self.datePickerCtrl1.SetFocus()
                return
            self.textCtrl1.SetLabel("")
            self.textCtrl2.SetFocus()
            return

        if nombre == "*":
            self.encontrado = True
            self.datePickerCtrl1.SetFocus()
            return

        r1 = "SELECT idproveedor,nombre FROM proveedor "
        r2 = "WHERE nombre LIKE '%"+nombre+"%' "
        consultaSQL = r1+r2
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if len(resultado)==1:
            proveedor = resultado[0]
            self.textCtrl1.SetLabel(proveedor["idproveedor"])
            self.textCtrl2.SetLabel(proveedor["nombre"])
            self.encontrado = True
            self.datePickerCtrl1.SetFocus()
            return
        if len(resultado)>1:
            import BuscaProveedor2
            ventana = BuscaProveedor2.Dialog1(self,nombre)
            try:
                ventana.ShowModal()
                eleccion = ventana.getSeleccion()
            finally:
                ventana.Destroy()
            if eleccion.split(" / ") != ['']:
                self.textCtrl1.SetValue(eleccion.split(" / ")[1])
                self.textCtrl2.SetValue(eleccion.split(" / ")[0])
                self.encontrado = True
            self.datePickerCtrl1.SetFocus()
            return
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl1.SetFocus()
        return

    def cargarSucursales(self):
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox2.Append(item["nombre"])
        self.comboBox2.Append("TODAS")
        self.comboBox2.SetEditable(False)

    def cargaRubros(self):
        r1 = "SELECT nombrerubro,idrubro FROM rubros WHERE 1 "
        r2 = "GROUP BY nombrerubro ORDER BY nombrerubro"
        sql = r1+r2
        resultados = consultasBD.ordenCruda(sql)
        self.comboBox1.Append("TODOS")
        for item in resultados:
            cadena = str(item[0])+" / "+str(item[1])
            self.comboBox1.Append(cadena)
        self.comboBox1.SetEditable(False)
        self.comboBox1.SetSelection(-1)

    def cargarTipoOperacion(self):
        self.comboBox7.SetSelection(0)

    def OnCambiaOperacion(self, event):
        if self.comboBox7.GetSelection()==1:
            self.comboBox2.SetSelection(0)
            self.comboBox2.Enable(False)
            self.checkBox1.Show(True)
            self.checkBox1.SetValue(True)
            self.checkBox1.SetLabel("Incluir Devoluciones")
        elif self.comboBox7.GetSelection()==0:
            self.comboBox2.SetSelection(-1)
            self.comboBox2.Enable(True)
            self.checkBox1.Show(True)
            self.checkBox1.SetValue(False)
            self.checkBox1.SetLabel("Incluir N.C.")
        else:
            print "Operacion no soportada"
            self.comboBox7.SetSelection(0)

    def cargaDetalles(self):
        self.comboBox3.Clear()
        lista = ['Rubro','Rubro,Grupo','Proveedor,Rugro,Grupo','Proveedor',\
                 'Rubro,Grupo,Talle','Rubro,Grupo,Talle,Color',\
                 'Rubro,Grupo,Color,Talle','Proveedor,Color']
        for item in lista:
            self.comboBox3.Append(item)
        self.comboBox3.SetEditable(False)
    
    def crearTablaProvisoria(self):
        sql = "DROP TABLE IF EXISTS listadocomprasventasporrubro"
        consultasBD.ordenCruda(sql)
        print "Creando tablas auxiliares"
        r1 = "CREATE TABLE  `listadocomprasventasporrubro` ("
        r2 = "`id` INT NOT NULL AUTO_INCREMENT ,"
        r3 = "`idproveedor` VARCHAR(10) NOT NULL ,"
        r4 = "`nombreproveedor` VARCHAR(50) NOT NULL ,"
        r5 = "`ptc` VARCHAR(15) NOT NULL ,"
        r6 = "`codsussan` VARCHAR(18) NOT NULL ,"
        r7 = "`idrubro` INT(4) NOT NULL ,`nombrerubro` VARCHAR(50) NOT NULL ,"
        r8 = "`idgrupo` INT(4) NOT NULL ,"
        r9 = "`nombregrupo` VARCHAR(50) NOT NULL ,"
        r0 = "`talle` VARCHAR(15) NOT NULL ,"
        rA = "`color` VARCHAR(50) NOT NULL ,"
        rB = "`sucursal` VARCHAR(2) NOT NULL ,"
        rC = "`cantidad` INT(5) NOT NULL ,"
        rD = "`preciofinal` DECIMAL(15,2) NOT NULL ,"
        rE = "PRIMARY KEY (`id`)"
        rF = ") ENGINE = INNODB"
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF
        consultasBD.ordenCruda(sql)

    def almacenaEnTabla(self,resultado):
        print "- Cargando datos en Tabla de Trabajo"
        dir = "c:\\matrisamor.doc\\"
        archivo = "listadocomprasventasporrubro.sql"
        nombreArchivo = dir+archivo
        f = open(nombreArchivo,"w")
        for datos in resultado:
            idproveedor = str(datos["idproveedor"])
            nombreproveedor = str(datos["nombreproveedor"])
            ptc = str(datos["ptc"])
            codsussan = str(datos["codsussan"])
            idrubro = str(datos["idrubro"])
            nombrerubro = str(datos["nombrerubro"])
            idgrupo = str(datos["idgrupo"])
            nombregrupo = str(datos["nombregrupo"])
            talle = str(datos["talle"])
            color = str(datos["color"])
            sucursal = str(datos["sucursal"])
            cantidad = str(datos["cantidad"])
            preciofinal = str(datos["preciofinal"])
            a = "INSERT INTO listadocomprasventasporrubro(idproveedor,nombreproveedor,"
            a+= "ptc,codsussan,idgrupo,nombregrupo,talle,color,"
            a+= "sucursal,cantidad,preciofinal,idrubro,nombrerubro) VALUES"
            a+= "('"+idproveedor+"','"+nombreproveedor+"','"+ptc+"',"
            a+= "'"+codsussan+"','"+idgrupo+"','"+nombregrupo+"','"+talle+"',"
            a+= "'"+color+"','"+sucursal+"','"+cantidad+"',"
            a+= "'"+preciofinal+"','"+idrubro+"','"+nombrerubro+"')"
            f.write(a+";\n")
        f.close()
        sucursal = utiles.getSucursalActiva()
        sucursal = int(sucursal)
        import servers
        host = servers.host
        user = servers.user
        passwd = servers.passwd
        db_name = servers.db_name
        import os
        try:
            comando = "mysql.exe -u "+user+" -p"+passwd+" -h "+host+" "+db_name+" < "+nombreArchivo
            os.system(comando)
            print "--> OK "
        except:
            print "--> ERROR: No pudo actualizarse la tabla"

    def encabezado(self,habilita=True):
        self.button2.Enable(True)
        self.button3.Enable(True)
        self.radioButton1.Enable(habilita)
        self.radioButton2.Enable(habilita)
        self.textCtrl1.Enable(habilita)
        self.textCtrl2.Enable(habilita)
        self.datePickerCtrl1.Enable(habilita)
        self.datePickerCtrl2.Enable(habilita)
        self.comboBox1.Enable(habilita)
        self.comboBox2.Enable(habilita)
        self.comboBox3.Enable(habilita)
        self.comboBox4.Enable(habilita)
        self.comboBox5.Enable(habilita)
        self.comboBox7.Enable(habilita)
        self.checkBox1.Enable(habilita)
        self.button1.Enable(habilita)
        
    def ajusteGrilla(self):
        for i in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(i,True)
        self.grid1.Refresh()

    def llenarComboTemporada(self):
        anio = int(utiles.obtenerFecha("Y-m-d")[:4])
        mes = int(utiles.obtenerFecha("Y-m-d")[5:7])
        dia = int(utiles.obtenerFecha("Y-m-d")[-2:])
        anioanterior = anio -1
        anioactual = anio
        aniosiguiente = anio + 1
        self.comboBox4.Append("INVIERNO"+str(anioanterior))
        self.comboBox4.Append("VERANO"+str(anioanterior))
        self.comboBox4.Append("INVIERNO"+str(anioactual))
        self.comboBox4.Append("VERANO"+str(anioactual))
        self.comboBox4.Append("INVIERNO"+str(aniosiguiente))
        self.comboBox4.Append("VERANO"+str(aniosiguiente))
        self.comboBox4.SetEditable(False)

    def crearGrilla(self):
        columnas =['']
        self.grid1.CreateGrid(1,len(columnas))
        for i,col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.grid1.EnableEditing(False)
        self.ajusteGrilla()

    def verificarOpciones(self):
        sucursal = self.comboBox2.GetSelection()
        totalItems = len(self.comboBox2.GetItems())-1
        if self.radioButton2.GetValue():
            if self.textCtrl1.GetLabel()=="" or self.textCtrl2.GetLabel()=="":
                utiles.mensaje(None,"Debe especificar proveedor")
                self.textCtrl1.SetFocus()
                return False
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha1 = fecha1.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha1)
        fecha1 = fecha1.replace("-","")
        fecha2 = self.datePickerCtrl2.GetLabel()
        fecha2 = fecha2.replace("/","-")
        fecha2 = utiles.invertirFecha(fecha2)
        fecha2 = fecha2.replace("-","")
        if fecha1 > fecha2:
            texto = "La fecha DESDE debe ser menor\n"
            texto+= "o igual a la fecha HASTA"
            utiles.mensaje(None,texto)
            self.datePickerCtrl1.SetFocus()
            return False
        if self.comboBox1.GetSelection()==-1:
            utiles.mensaje(None,"Debe seleccionar RUBRO")
            self.comboBox1.SetFocus()
            return False
        if self.comboBox2.GetSelection()==-1:
            utiles.mensaje(None,"Debe seleccionar SUCURSAL")
            self.comboBox2.SetFocus()
            return False
        if self.comboBox3.GetSelection()==-1:
               utiles.mensaje(None,"Debe seleccionar Tipo de Reporte")
               self.comboBox3.SetFocus()
               return False

        return True
        
    def armarSQL1(self): #compras
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha1 = fecha1.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha1)
        fecha2 = self.datePickerCtrl2.GetLabel()
        fecha2 = fecha2.replace("/","-")
        fecha2 = utiles.invertirFecha(fecha2)
        r1 = " v.fecha BETWEEN '"+fecha1+" 00:00:00' AND '"+fecha2+" 23:59:59' \n"
        opcion1 = r1
        opcion2 = ""
        if self.radioButton2.GetValue():
            idproveedor = self.textCtrl1.GetLabel()
            opcion2 = "AND p.proveedor='"+idproveedor+"' "
        opcion3 = ""
        if self.comboBox1.GetSelection()>0:
            nombrerubro,idrubro = (self.comboBox1.GetLabel()).split(" / ")
            opcion3 = "AND r.idrubro='"+idrubro+"' "
        opcion4 = " AND vtp.cantidad>0 \n"
        if self.checkBox1.GetValue():
            opcion4 = ""
        opcion5 = ""
        if self.comboBox4.GetSelection()!=-1:
            temporada = self.comboBox4.GetLabel()
            opcion5 = " AND ptc.temporada LIKE '%"+temporada+"%' \n"
        opcion6 = ""
        if self.comboBox5.GetSelection()!=-1:
            nombregrupo,idgrupo = (self.comboBox5.GetLabel()).split(" / ")
            opcion6 = " AND p.grupo='"+idgrupo+"' \n"
        
        #idproveedor,nombreproveedor,ptc,codsussan,idgrupo,nombregrupo,talle,
        #color,sucursal,cantidad,preciofinal,idrubro,nombrerubro

        sql = ""
        
        r1 = "SELECT p1.idproveedor,p1.nombreproveedor,p1.ptc,p1.codsussan,\n"
        r2 = "       p1.idgrupo,p1.nombregrupo,p1.talle,p1.color,\n"
        r3 = "       p1.sucursal,SUM(p1.cantidad) AS cantidad,\n"
        r4 = "       SUM(p1.preciofinal) AS preciofinal,\n"
        r5 = "       p1.idrubro,p1.nombrerubro \n"
        r6 = "FROM \n"
        r7 = "  (SELECT p.proveedor AS idproveedor,pv.nombre AS nombreproveedor,\n"
        r8 = "          ptc.id AS ptc,ptc.codsussan,p.grupo AS idgrupo,\n"
        r9 = "          g.nombregrupo,ptc.talle,co.nombre AS color,v.sucursal,\n"
        r0 = "          vtp.cantidad,vtp.preciofinal,r.idrubro,r.nombrerubro \n"
        rA = "   FROM ventas v,ventastieneproductos vtp,\n"
        rB = "        producto_talle_color ptc,productos p,grupos g,\n"
        rC = "        rubros r, proveedor pv,colores co \n"
        rD = "   WHERE "+opcion1+" AND co.idcolor=ptc.color \n"
        rE = "   AND v.idventa=vtp.idticket "+opcion4+opcion5
        rF = "   AND vtp.ptc=ptc.id # \n"
        rG = "   AND ptc.codsussan=p.codsussan "+opcion2+" \n"
        rH = "   AND p.grupo=g.idgrupo \n"
        rI = "   AND p.proveedor=pv.idproveedor \n"
        rJ = "   AND r.idgrupo=g.idgrupo "+opcion3+opcion6+") AS p1 \n"
        rK = "WHERE 1 \n"
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF+rG+rH+rI+rJ+rK

        if self.comboBox3.GetLabel()=="Rubro":
            sql+= " GROUP BY nombrerubro ORDER BY nombrerubro "
        if self.comboBox3.GetLabel()=="Rubro,Grupo":
            sql+= " GROUP BY nombregrupo ORDER BY nombregrupo "
        if self.comboBox3.GetLabel()=="Proveedor,Rugro,Grupo":
            r1 = "GROUP BY nombreproveedor,nombrerubro,nombregrupo \n"
            r2 = "ORDER BY nombreproveedor,nombrerubro,nombregrupo "
            sql+= r1+r2
        if self.comboBox3.GetLabel()=="Proveedor":
            sql+= " GROUP BY nombreproveedor ORDER BY nombreproveedor "
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle":
            r1 = "GROUP BY nombrerubro,nombregrupo,talle \n"
            r2 = "ORDER BY nombrerubro,nombregrupo,talle "
            sql+= r1+r2
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle,Color":
            r1 = "GROUP BY nombrerubro,nombregrupo,talle,color \n"
            r2 = "ORDER BY nombrerubro,nombregrupo,talle,color "
            sql+= r1+r2
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Color,Talle":
            r1 = "GROUP BY nombrerubro,nombregrupo,color,talle \n"
            r2 = "ORDER BY nombrerubro,nombregrupo,color,talle "
            sql+= r1+r2
        if self.comboBox3.GetLabel()=="Proveedor,Color":
            r1 = "GROUP BY nombreproveedor,color \n"
            r2 = "ORDER BY nombreproveedor,color "
            sql+= r1+r2
            
        return sql

    def armarSQL2(self):
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha1 = fecha1.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha1)
        fecha2 = self.datePickerCtrl2.GetLabel()
        fecha2 = fecha2.replace("/","-")
        fecha2 = utiles.invertirFecha(fecha2)
        r1 = " c.fechaingreso BETWEEN '"+fecha1+" 00:00:00' "
        r2 = "AND '"+fecha2+" 23:59:59' \n"
        opcion1 = r1+r2
        opcion2 = ""
        if self.radioButton2.GetValue():
            idproveedor = self.textCtrl1.GetLabel()
            opcion2 = "AND p.proveedor='"+idproveedor+"' "
        opcion3 = ""
        if self.comboBox1.GetSelection()>0:
            nombre,idrubro = (self.comboBox1.GetLabel()).split(" / ")
            opcion3 = "AND r.idrubro='"+idrubro+"' "
        opcion5 = ""
        if self.comboBox4.GetSelection()!=-1:
            temporada = self.comboBox4.GetLabel()
            opcion5 = " AND ptc.temporada LIKE '%"+temporada+"%' \n"
        opcion6 = ""
        if self.comboBox5.GetSelection()!=-1:
            nombregrupo,idgrupo = (self.comboBox5.GetLabel()).split(" / ")
            opcion6 = " AND p.grupo='"+idgrupo+"' \n"

        sql = ""
        #idproveedor,nombreproveedor,ptc,codsussan,idgrupo,nombregrupo,talle,
        #color,sucursal,cantidad,preciofinal,idrubro,nombrerubro
        r1 = "SELECT p1.idproveedor,p1.nombreproveedor,p1.ptc,p1.codsussan, \n"
        r2 = "       p1.idgrupo,p1.nombregrupo,p1.talle,p1.color,p1.sucursal, \n"
        r3 = "       p1.cantidad,p1.preciofinal,p1.idrubro,p1.nombrerubro \n"
        r4 = "FROM \n"
        r5 = "  (SELECT c.idfactura,c.nrofactura,c.idproveedor,ci.codsussan, \n"
        r6 = "          ptc.id AS ptc,c.en1oen2 AS sucursal,ci.talle,co.nombre AS color, \n"
        r7 = "          p.grupo AS idgrupo,g.nombregrupo,r.idrubro, \n"
        r8 = "          pv.nombre AS nombreproveedor,r.nombrerubro,ci.cantidad, \n"
        r9 = "          ci.costounidad, \n"
        r0 = "          (ci.cantidad*ci.costounidad) AS preciofinal \n"
        rA = "   FROM compras c,compras_items ci,productos p,grupos g, \n"
        rB = "        rubros r, proveedor pv, producto_talle_color ptc,colores co \n"
        rC = "   WHERE "+opcion1+" AND co.idcolor=ci.color \n"+opcion5
        rD = "   AND c.idfactura=ci.idfactura AND ci.codsussan<>'DEV' \n"
        rE = "   AND ci.codsussan=p.codsussan AND ci.codsussan=ptc.codsussan \n"
        rF = "   AND ci.color=ptc.color AND ci.talle=ptc.talle \n"
        rF1= "   AND p.grupo=g.idgrupo "+opcion2+" \n"
        rG = "   AND c.idproveedor=pv.idproveedor "+opcion3+opcion6+" \n"
        rH = "   AND r.idgrupo=g.idgrupo  ) AS p1 \n"
        rI = "WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF+rF1+rG+rH+rI

        return sql

    def armarSQL3(self): #devoluciones
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha1 = fecha1.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha1)
        fecha2 = self.datePickerCtrl2.GetLabel()
        fecha2 = fecha2.replace("/","-")
        fecha2 = utiles.invertirFecha(fecha2)
        r1 = " d.fecha BETWEEN '"+fecha1+" 00:00:00' "
        r2 = "AND '"+fecha2+" 23:59:59' \n"
        opcion1 = r1+r2
        opcion2 = ""
        if self.radioButton2.GetValue():
            idproveedor = self.textCtrl1.GetLabel()
            opcion2 = "AND p.proveedor='"+idproveedor+"' "
        opcion3 = ""
        if self.comboBox1.GetSelection()>0:
            nombre,idrubro = (self.comboBox1.GetLabel()).split(" / ")
            opcion3 = "AND r.idrubro='"+idrubro+"' "
        opcion5 = ""
        if self.comboBox4.GetSelection()!=-1:
            temporada = self.comboBox4.GetLabel()
            opcion5 = " AND ptc.temporada LIKE '%"+temporada+"%' \n"
        opcion6 = ""
        if self.comboBox5.GetSelection()!=-1:
            nombregrupo,idgrupo = (self.comboBox5.GetLabel()).split(" / ")
            opcion6 = " AND p.grupo='"+idgrupo+"' \n"

        sql = ""
        #idproveedor,nombreproveedor,ptc,codsussan,idgrupo,nombregrupo,talle,
        #color,sucursal,cantidad,preciofinal,idrubro,nombrerubro
        r1 = "SELECT p1.idproveedor,p1.nombreproveedor,p1.ptc,p1.codsussan, \n"
        r2 = "       p1.idgrupo,p1.nombregrupo,p1.talle,p1.color,p1.sucursal, \n"
        r3 = "       p1.cantidad,p1.preciofinal,p1.idrubro,p1.nombrerubro \n"
        r4 = "FROM \n"
        r5 = "  (SELECT d.idProveedor AS idproveedor,di.codsussan, \n"
        r6 = "          di.ptc,'1' AS sucursal,di.talle,di.color, \n"
        r7 = "          p.grupo AS idgrupo,g.nombregrupo,r.idrubro, \n"
        r8 = "          pv.nombre AS nombreproveedor,r.nombrerubro,di.cantidad*-1 as cantidad, \n"
        r9 = "          di.monto AS costounidad, \n"
        r0 = "          (di.cantidad*-1*di.monto) AS preciofinal \n"
        rA = "   FROM comprasdevoluciones d,comprasdevoluciones_items di,productos p,grupos g, \n"
        rB = "        rubros r, proveedor pv, producto_talle_color ptc \n"
        rC = "   WHERE "+opcion1+opcion5+" AND ptc.id=di.ptc \n"
        rD = "   AND d.idDevolucion=di.idDevolucion \n"
        rE = "   AND di.codsussan=p.codsussan \n"
        rF = "   \n"
        rF1= "   AND p.grupo=g.idgrupo "+opcion2+opcion6+" \n"
        rG = "   AND d.idProveedor=pv.idproveedor "+opcion3+" \n"
        rH = "   AND r.idgrupo=g.idgrupo  ) AS p1 \n"
        rI = "WHERE 1 "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF+rF1+rG+rH+rI

        return sql

    def cargaDatos(self,sql,sql2=""):
        sql = sql
        sucursal = self.comboBox2.GetSelection()
        totalItems = len(self.comboBox2.GetItems())-1
        if sucursal==totalItems: #se procesan todas las sucursales
            for sucursal in xrange(totalItems):
                sqlNovo = sql.replace("#","AND vtp.sucursal='"+str(sucursal+1)+"' ")
                print sqlNovo
                resultado,conecta = consultasBD.ordenCrudaDictRemota2(sqlNovo,sucursal)
                print "- Lectura al server realizada. Procesando datos"
                if conecta:
                    if resultado != () or resultado == None or len(resultado)!=0:
                        print "- Almacenando datos"
                        self.almacenaEnTabla(resultado)
                    else:
                        print "- No se ha obtenido informacion de la sucursal",self.comboBox2.GetItems()[sucursal]
                else:
                    print "- No hay conexion con la sucursal",self.comboBox2.GetItems()[sucursal]
        else: #se procesa sucursal seleccionada
            if self.comboBox7.GetSelection()==0:
                sqlNovo = sql.replace("#","AND vtp.sucursal='"+str(sucursal+1)+"' ")
            else:
                sqlNovo = sql.replace("#"," ")
                sqlNovo2 = sql2.replace("#"," ")
            print sqlNovo
            resultado,conecta = consultasBD.ordenCrudaDictRemota2(sqlNovo,sucursal)
            print "- Lectura al server realizada. Procesando datos"
            if conecta:
                if resultado != () or resultado == None or len(resultado)!=0:
                    print "- Almacenando datos"
                    self.almacenaEnTabla(resultado)
                else:
                    utiles.mensaje(None,"No se ha obtenido informacion\nde la sucursal seleccionada")
                    return False
            else:
                utiles.mensaje(None,"No hay conexion")
                return False
            #procesa devoluciones (si falla la lectura, igual se sigue el procedimiento)
            if sql2!="" and self.checkBox1.GetValue():
                print sqlNovo2
                resultado,conecta = consultasBD.ordenCrudaDictRemota2(sqlNovo2,sucursal)
                print "- Lectura al server realizada. Procesando datos de Devoluciones"
                if conecta:
                    if resultado != () or resultado == None or len(resultado)!=0:
                        print "- Almacenando datos de devoluciones"
                        self.almacenaEnTabla(resultado)
                    else:
                        texto = "No se ha obtenido informacion\n"
                        texto+= "de la sucursal seleccionada.\n"
                        texto+= "No se obtuvo informacion de devoluciones"
                        utiles.mensaje(None,texto)
                else:
                    utiles.mensaje(None,"No hay conexion\nNo se obtuvo info de Devoluciones")

        return True

    def determinaColumnas(self):
        titulo = []
        if self.comboBox3.GetLabel()=="Rubro":
            titulo.append("Rubro")
        if self.comboBox3.GetLabel()=="Rubro,Grupo":
            titulo.append("Rubro")
            titulo.append("Grupo")
        if self.comboBox3.GetLabel()=="Proveedor,Rugro,Grupo":
            titulo.append("Proveedor")
            titulo.append("Rubro")
            titulo.append("Grupo")
        if self.comboBox3.GetLabel()=="Proveedor":
            titulo.append("Proveedor")
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle":
            titulo.append("Rubro")
            titulo.append("Grupo")
            titulo.append("Talle")
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle,Color":
            titulo.append("Rubro")
            titulo.append("Grupo")
            titulo.append("Talle")
            titulo.append("Color")
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Color,Talle":
            titulo.append("Rubro")
            titulo.append("Grupo")
            titulo.append("Color")
            titulo.append("Talle")
        if self.comboBox3.GetLabel()=="Proveedor,Color":
            titulo.append("Proveedor")
            titulo.append("Color")

        titulo.append("Cantidad")
        if self.comboBox7.GetSelection()==0:
            titulo.append("Pesos\nVendidos")
        else:
            titulo.append("Pesos\nComprados")
        for i, col in enumerate(titulo): 
            self.grid1.SetColLabelValue(i, col)
            self.grid1.AppendCols()
        self.grid1.DeleteCols(i+1)
        self.ajusteGrilla()

    def OnImprimir(self, event):
        print "Imprimir"

        f=open("c:\\matrisamor.doc\\reporte-ListadoVentasPorRubro.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()
            fecha1 = self.datePickerCtrl1.GetLabel()
            fecha2 = self.datePickerCtrl2.GetLabel()
            operacion = self.comboBox7.GetLabel()
            operacion = operacion.upper()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">\n'
            a+= 'SUSSAN BOUTIQUE<br><font size="0.02">Listado '+operacion+' por Rubro</font>\n'
            a+= '</td>\n<td valign="center" align="left" width="34%"><font size="0.02">\n'
            a+= 'Desde '+fecha1+' Hasta '+fecha2+' Rubro: '+self.comboBox1.GetLabel()+'<br>\n'
            if self.radioButton1.GetValue():
                a+= 'Proveedor: TODOS '
            else:
                a+= 'Proveedor: '+self.textCtrl2.GetLabel()
            a+= ' Reporte: '+self.comboBox3.GetLabel()+'\n'
            a+= '</font></td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            a = '<hr>'

            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            i = 0
            for col in xrange(self.grid1.GetNumberCols()-2):
                i+= 1
                titulo = self.grid1.GetColLabelValue(col)
                a+= '<td valign="top" align="left">'+titulo+'</td> \n'
            a+= '<td valign="top" align="right">Cant</td> \n'
            if self.comboBox7.GetSelection()==0:
                tipo = "Vendido"
            else:
                tipo = "Comprado"
            a+= '<td valign="top" align="right">Total<br>'+tipo+'</td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="'+str(i+2)+'"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        for fil in xrange(self.grid1.GetNumberRows()):
            cadena = '<tr> \n'
            taman = "1.5"
            for col in xrange(self.grid1.GetNumberCols()-2):
                celda = self.grid1.GetCellValue(fil,col)
                cadena+= '<td valign="center" align="left"><font size="'+taman+'">'+celda+'</font></td> \n'
            celda = self.grid1.GetCellValue(fil,self.grid1.GetNumberCols()-2)
            cadena+= '<td valign="center" align="right"><font size="'+taman+'">'+celda+'</font></td> \n'
            celda = self.grid1.GetCellValue(fil,self.grid1.GetNumberCols()-1)
            cadena+= '<td valign="center" align="right"><font size="'+taman+'">'+celda+'</font></td> \n'
            
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")                
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"1"'
            
        cadena = '</table>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-ListadoVentasPorRubro.html")

    def OnExportar(self, event):
        fecha = utiles.obtenerFecha("Y-m-d h:m:s")
        fecha = fecha.replace("-","")
        fecha = fecha.replace(" ","")
        fecha = fecha.replace(":","")
        dir = "c:\\matrisamor.doc\\"
        archivo = "ventasPorRubro-"+fecha+".cvs"
        nombre = dir+archivo
        f = open(nombre,"w")
        titulo = ""
        for col in xrange(self.grid1.GetNumberCols()):
            titulo+= self.grid1.GetColLabelValue(col)+";"
        titulo = titulo[:-1]
        titulo = titulo.replace("\n"," ")
        f.write(titulo+"\n")
        for fil in xrange(self.grid1.GetNumberRows()):
            cadena = ""
            for col in xrange(self.grid1.GetNumberCols()):
                cadena+= self.grid1.GetCellValue(fil,col)+";"
            f.write(cadena[:-1]+"\n")
        f.close()
        utiles.mensaje(None,"Exportado en "+dir+"\nen el archivo de nombre\n"+archivo)

    def OnProcesar(self, event):
        if not self.verificarOpciones():
            print "Error en opciones iniciales"
            return
        self.crearTablaProvisoria()
        self.encabezado(False)
        self.determinaColumnas()

        sql2 = ""
        if self.comboBox7.GetSelection()==0:
            sql = self.armarSQL1() #ventas
        else:
            sql = self.armarSQL2() #compras
            sql2 = self.armarSQL3() #devoluciones

        if not self.cargaDatos(sql,sql2):
            utiles.mensaje(None,"Error al trabajar con tabla auxiliar")
            self.OnLimpiar(None)
            return

        #procesando sobre la tabla auxiliar de trabajo
        #idproveedor,nombreproveedor,ptc,codsussan,idgrupo,nombregrupo,talle,
        #color,sucursal,cantidad,preciofinal,idrubro,nombrerubro
        r1 = "SELECT idproveedor,nombreproveedor,ptc,codsussan,\n"
        r2 = "       idgrupo,nombregrupo,talle,color,sucursal,\n"
        r3 = "       SUM(cantidad) AS cantidad,SUM(preciofinal) AS pesos,\n"
        r4 = "       idrubro,nombrerubro \n"
        r5 = "FROM listadocomprasventasporrubro WHERE 1 \n"
        r6 = ""
        if self.comboBox3.GetLabel()=="Rubro":
            r6 = "GROUP BY nombrerubro ORDER BY nombrerubro "
        if self.comboBox3.GetLabel()=="Rubro,Grupo":
            r6 = "GROUP BY nombregrupo ORDER BY nombrerubro,nombregrupo "
        if self.comboBox3.GetLabel()=="Proveedor,Rugro,Grupo":
            r61 = "GROUP BY nombreproveedor,nombrerubro,nombregrupo \n"
            r62 = "ORDER BY nombreproveedor,nombrerubro,nombregrupo "
            r6 = r61+r62
        if self.comboBox3.GetLabel()=="Proveedor":
            r6 = "GROUP BY nombreproveedor ORDER BY nombreproveedor "
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle":
            r61 = "GROUP BY nombrerubro,nombregrupo,talle \n"
            r62 = "ORDER BY nombrerubro,nombregrupo,talle "
            r6 = r61+r62
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle,Color":
            r61 = "GROUP BY nombrerubro,nombregrupo,talle,color \n"
            r62 = "ORDER BY nombrerubro,nombregrupo,talle,color "
            r6 = r61+r62
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Color,Talle":
            r61 = "GROUP BY nombrerubro,nombregrupo,color,talle \n"
            r62 = "ORDER BY nombrerubro,nombregrupo,color,talle "
            r6 = r61+r62
        if self.comboBox3.GetLabel()=="Proveedor,Color":
            r61 = "GROUP BY nombreproveedor,color \n"
            r62 = "ORDER BY nombreproveedor,color "
            r6 = r61+r62

        sql = r1+r2+r3+r4+r5+r6

        print "*"*100
        print sql
        print "*"*100

        resultado = consultasBD.ordenCrudaDict(sql)
        if self.comboBox3.GetLabel()=="Rubro":
            print "- Procesando Rubros"
            self.procesarRubros(resultado)
        if self.comboBox3.GetLabel()=="Rubro,Grupo":
            print "- Procesando Rubros,Grupos"
            self.procesarGrupos(resultado)
        if self.comboBox3.GetLabel()=="Proveedor,Rugro,Grupo":
            print "- Procesando Proveedor,Rubros,Grupos"
            self.procesarProveedorGrupos(resultado)
        if self.comboBox3.GetLabel()=="Proveedor":
            print "- Procesando Proveedor"
            self.procesarProveedor(resultado)
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle":
            print "- Procesando Rubro,Grupo,Talle"
            self.procesarRubrosGruposTalles(resultado)
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Talle,Color":
            print "- Procesando Rubro,Grupo,Talle,Color"
            self.procesarRubrosGruposTallesColor(resultado)
        if self.comboBox3.GetLabel()=="Rubro,Grupo,Color,Talle":
            print "- Procesando Rubro,Grupo,Color,Talle"
            self.procesarRubrosGruposColorTalles(resultado)
        if self.comboBox3.GetLabel()=="Proveedor,Color":
            print "- Procesando Proveedor,Color"
            self.procesarProveedorColor(resultado)

        return

    def procesarRubros(self,datos):
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        for item in datos:
            #rubro,cantidad,pesos
            idrubro = str(item["idrubro"])
            rubro= item["nombrerubro"]+" / "+idrubro
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            
            self.grid1.SetCellValue(fil,0,rubro)
            self.grid1.SetCellValue(fil,1,cantidad)
            self.grid1.SetCellValue(fil,2,pesos)
            self.grid1.SetCellAlignment(fil,1, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            self.grid1.AppendRows()
            fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,1,str(totGeneralItems))
        self.grid1.SetCellValue(fil,2,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,1, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

        self.ajusteGrilla()

    def procesarGrupos(self,datos):
        totRubroItems = 0
        totRubroPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        rubro = ""
        try:
            idrubroAnt = str(datos[0]["idrubro"])
            rubro = datos[0]["nombrerubro"]+" / "+idrubroAnt
        except:
            print "ERROR: no pudo establecerse rubro inicial"
        
        for item in datos:
            #rubro,grupo,cantidad,pesos
            idrubro = str(item["idrubro"])
            idgrupo = str(item["idgrupo"])
            grupo = item["nombregrupo"]+" / "+idgrupo
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idrubroAnt != idrubro:
                #cambia rubro, mostrar subtotales
                if self.radioButton1.GetValue():
                    self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
                    self.grid1.SetCellValue(fil,2,str(totRubroItems))
                    self.grid1.SetCellValue(fil,3,str(totRubroPesos))
                    self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                    self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                    totRubroItems = 0
                    totRubroPesos = Decimal("0.00")
                    self.grid1.AppendRows()
                    fil+= 1
                idrubroAnt = idrubro
                rubro = item["nombrerubro"]+" / "+idrubroAnt

            totRubroItems+= int(cantidad)
            totRubroPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,rubro)
            self.grid1.SetCellValue(fil,1,grupo)
            self.grid1.SetCellValue(fil,2,cantidad)
            self.grid1.SetCellValue(fil,3,pesos)
            self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            rubro = ""
            self.grid1.AppendRows()
            fil+= 1

        #al finalizar, debe mostrarse subtotal del ultimo rubro procesado
        if self.radioButton1.GetValue():
            self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
            self.grid1.SetCellValue(fil,2,str(totRubroItems))
            self.grid1.SetCellValue(fil,3,str(totRubroPesos))
            self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,2,str(totGeneralItems))
        self.grid1.SetCellValue(fil,3,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()
    
    def procesarProveedorGrupos(self,datos):
        totProvItems = 0
        totProvPesos = Decimal("0.00")
        totRubroItems = 0
        totRubroPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        rubro = ""
        try:
            idrubroAnt = str(datos[0]["idrubro"])
            rubro = datos[0]["nombrerubro"]+" / "+idrubroAnt
        except:
            print "ERROR: no pudo establecerse rubro inicial"
        proveedor = ""
        try:
            idprovAnt = str(datos[0]["idproveedor"])
            proveedor = datos[0]["nombreproveedor"]+" / "+idprovAnt
        except:
            print "ERROR: no pudo establecerse proveedor inicial"
        
        for item in datos:
            #proveedor,rubro,grupo,cantidad,pesos
            idproveedor = str(item["idproveedor"])
            idrubro = str(item["idrubro"])
            idgrupo = str(item["idgrupo"])
            grupo = item["nombregrupo"]+" / "+idgrupo
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idprovAnt != idproveedor:
                #cambia proveedor y rubro, mostrar subtotales
##                self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
##                self.grid1.SetCellValue(fil,3,str(totRubroItems))
##                self.grid1.SetCellValue(fil,4,str(totRubroPesos))
##                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
##                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
##                totRubroItems = 0
##                totRubroPesos = Decimal("0.00")
##                idrubroAnt = idrubro
##                rubro = item["nombrerubro"]+" / "+idrubroAnt
##                self.grid1.AppendRows()
##                fil+= 1
                #cambia proveedor, mostrar subtotales
                if self.radioButton1.GetValue():
                    self.grid1.SetCellValue(fil,1,"- Subtotal Proveedor")
                    self.grid1.SetCellValue(fil,3,str(totProvItems))
                    self.grid1.SetCellValue(fil,4,str(totProvPesos))
                    self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                    self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                    totProvItems = 0
                    totProvPesos = Decimal("0.00")
                    self.grid1.AppendRows()
                    fil+= 1
                idprovAnt = idproveedor
                proveedor = item["nombreproveedor"]+" / "+idproveedor
            if idrubroAnt != idrubro:
                #cambia rubro, mostrar subtotales
##                self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
##                self.grid1.SetCellValue(fil,3,str(totRubroItems))
##                self.grid1.SetCellValue(fil,4,str(totRubroPesos))
##                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
##                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totRubroItems = 0
                totRubroPesos = Decimal("0.00")
                idrubroAnt = idrubro
                rubro = item["nombrerubro"]+" / "+idrubroAnt
##                self.grid1.AppendRows()
##                fil+= 1

            totProvItems+= int(cantidad)
            totProvPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totRubroItems+= int(cantidad)
            totRubroPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,proveedor)
            self.grid1.SetCellValue(fil,1,rubro)
            self.grid1.SetCellValue(fil,2,grupo)
            self.grid1.SetCellValue(fil,3,cantidad)
            self.grid1.SetCellValue(fil,4,pesos)
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

##            rubro = ""
            proveedor = ""
            self.grid1.AppendRows()
            fil+= 1

        #al finalizar, debe mostrarse subtotal del ultimo rubro procesado
##        self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
##        self.grid1.SetCellValue(fil,3,str(totRubroItems))
##        self.grid1.SetCellValue(fil,4,str(totRubroPesos))
##        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
##        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
##        self.grid1.AppendRows()
##        fil+= 1
        #al finalizar, debe mostrarse subtotal del ultimo proveedor procesado
        if self.radioButton1.GetValue():
            self.grid1.SetCellValue(fil,1,"- Subtotal Proveedor")
            self.grid1.SetCellValue(fil,3,str(totProvItems))
            self.grid1.SetCellValue(fil,4,str(totProvPesos))
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,3,str(totGeneralItems))
        self.grid1.SetCellValue(fil,4,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()
        
    def procesarProveedor(self,datos):
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        for item in datos:
            #proveedor,cantidad,pesos
            idproveedor = str(item["idproveedor"])
            proveedor = item["nombreproveedor"]+" / "+idproveedor
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            
            self.grid1.SetCellValue(fil,0,proveedor)
            self.grid1.SetCellValue(fil,1,cantidad)
            self.grid1.SetCellValue(fil,2,pesos)
            self.grid1.SetCellAlignment(fil,1, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            self.grid1.AppendRows()
            fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,1,str(totGeneralItems))
        self.grid1.SetCellValue(fil,2,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,1, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

        self.ajusteGrilla()
        
    def procesarRubrosGruposTalles(self,datos):
        totGrupoItems = 0
        totGrupoPesos = Decimal("0.00")
        totRubroItems = 0
        totRubroPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        rubro = ""
        try:
            idrubroAnt = str(datos[0]["idrubro"])
            rubro = datos[0]["nombrerubro"]+" / "+idrubroAnt
        except:
            print "ERROR: no pudo establecerse rubro inicial"
        proveedor = ""
        try:
            idgrupoAnt = str(datos[0]["idgrupo"])
            grupo = datos[0]["nombregrupo"]+" / "+idgrupoAnt
        except:
            print "ERROR: no pudo establecerse grupo inicial"
        
        for item in datos:
            #rubro,grupo,talle,cantidad,pesos
            idrubro = str(item["idrubro"])
            idgrupo = str(item["idgrupo"])
            talle = str(item["talle"])
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idrubroAnt != idrubro:
                #cambia rubro y debo mostrar subtotales grupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,3,str(totGrupoItems))
                self.grid1.SetCellValue(fil,4,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
                self.grid1.SetCellValue(fil,3,str(totRubroItems))
                self.grid1.SetCellValue(fil,4,str(totRubroPesos))
                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totRubroItems = 0
                totRubroPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idrubroAnt = idrubro
                rubro = item["nombrerubro"]+" / "+idrubro
            if idgrupoAnt != idgrupo:
                #cambia grupo, mostrar subtotales
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,3,str(totGrupoItems))
                self.grid1.SetCellValue(fil,4,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupoAnt
                self.grid1.AppendRows()
                fil+= 1

            totGrupoItems+= int(cantidad)
            totGrupoPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totRubroItems+= int(cantidad)
            totRubroPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,rubro)
            self.grid1.SetCellValue(fil,1,grupo)
            self.grid1.SetCellValue(fil,2,talle)
            self.grid1.SetCellValue(fil,3,cantidad)
            self.grid1.SetCellValue(fil,4,pesos)
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

            rubro = ""
            grupo = ""

        #al finalizar, debe mostrarse subtotal del ultimo grupo procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
        self.grid1.SetCellValue(fil,3,str(totGrupoItems))
        self.grid1.SetCellValue(fil,4,str(totGrupoPesos))
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1
        #al finalizar, debe mostrarse subtotal del ultimo rubro procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
        self.grid1.SetCellValue(fil,3,str(totRubroItems))
        self.grid1.SetCellValue(fil,4,str(totRubroPesos))
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,3,str(totGeneralItems))
        self.grid1.SetCellValue(fil,4,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()
        
    def procesarRubrosGruposTallesColor(self,datos):
        totGrupoItems = 0
        totGrupoPesos = Decimal("0.00")
        totRubroItems = 0
        totRubroPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        rubro = ""
        try:
            idrubroAnt = str(datos[0]["idrubro"])
            rubro = datos[0]["nombrerubro"]+" / "+idrubroAnt
        except:
            print "ERROR: no pudo establecerse rubro inicial"
        proveedor = ""
        try:
            idgrupoAnt = str(datos[0]["idgrupo"])
            grupo = datos[0]["nombregrupo"]+" / "+idgrupoAnt
        except:
            print "ERROR: no pudo establecerse grupo inicial"
        
        for item in datos:
            #rubro,grupo,talle,cantidad,pesos
            idrubro = str(item["idrubro"])
            idgrupo = str(item["idgrupo"])
            talle = str(item["talle"])
            color = str(item["color"])
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idrubroAnt != idrubro:
                #cambia rubro y debo mostrar subtotales grupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,4,str(totGrupoItems))
                self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
                self.grid1.SetCellValue(fil,4,str(totRubroItems))
                self.grid1.SetCellValue(fil,5,str(totRubroPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totRubroItems = 0
                totRubroPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idrubroAnt = idrubro
                rubro = item["nombrerubro"]+" / "+idrubro
            if idgrupoAnt != idgrupo:
                #cambia grupo, mostrar subtotales
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,4,str(totGrupoItems))
                self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupoAnt
                self.grid1.AppendRows()
                fil+= 1

            totGrupoItems+= int(cantidad)
            totGrupoPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totRubroItems+= int(cantidad)
            totRubroPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,rubro)
            self.grid1.SetCellValue(fil,1,grupo)
            self.grid1.SetCellValue(fil,2,talle)
            self.grid1.SetCellValue(fil,3,color)
            self.grid1.SetCellValue(fil,4,cantidad)
            self.grid1.SetCellValue(fil,5,pesos)
            self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

            rubro = ""
            grupo = ""

        #al finalizar, debe mostrarse subtotal del ultimo grupo procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
        self.grid1.SetCellValue(fil,4,str(totGrupoItems))
        self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1
        #al finalizar, debe mostrarse subtotal del ultimo rubro procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
        self.grid1.SetCellValue(fil,4,str(totRubroItems))
        self.grid1.SetCellValue(fil,5,str(totRubroPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,4,str(totGeneralItems))
        self.grid1.SetCellValue(fil,5,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()

    def procesarRubrosGruposColorTalles(self,datos):
        totGrupoItems = 0
        totGrupoPesos = Decimal("0.00")
        totRubroItems = 0
        totRubroPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        rubro = ""
        try:
            idrubroAnt = str(datos[0]["idrubro"])
            rubro = datos[0]["nombrerubro"]+" / "+idrubroAnt
        except:
            print "ERROR: no pudo establecerse rubro inicial"
        proveedor = ""
        try:
            idgrupoAnt = str(datos[0]["idgrupo"])
            grupo = datos[0]["nombregrupo"]+" / "+idgrupoAnt
        except:
            print "ERROR: no pudo establecerse grupo inicial"
        
        for item in datos:
            #rubro,grupo,talle,cantidad,pesos
            idrubro = str(item["idrubro"])
            idgrupo = str(item["idgrupo"])
            talle = str(item["talle"])
            color = str(item["color"])
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idrubroAnt != idrubro:
                #cambia rubro y debo mostrar subtotales grupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,4,str(totGrupoItems))
                self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
                self.grid1.SetCellValue(fil,4,str(totRubroItems))
                self.grid1.SetCellValue(fil,5,str(totRubroPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totRubroItems = 0
                totRubroPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idrubroAnt = idrubro
                rubro = item["nombrerubro"]+" / "+idrubro
            if idgrupoAnt != idgrupo:
                #cambia grupo, mostrar subtotales
                self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
                self.grid1.SetCellValue(fil,4,str(totGrupoItems))
                self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
                self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totGrupoItems = 0
                totGrupoPesos = Decimal("0.00")
                idgrupoAnt = idgrupo
                grupo = item["nombregrupo"]+" / "+idgrupoAnt
                self.grid1.AppendRows()
                fil+= 1

            totGrupoItems+= int(cantidad)
            totGrupoPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totRubroItems+= int(cantidad)
            totRubroPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,rubro)
            self.grid1.SetCellValue(fil,1,grupo)
            self.grid1.SetCellValue(fil,2,color)
            self.grid1.SetCellValue(fil,3,talle)
            self.grid1.SetCellValue(fil,4,cantidad)
            self.grid1.SetCellValue(fil,5,pesos)
            self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

            rubro = ""
            grupo = ""

        #al finalizar, debe mostrarse subtotal del ultimo grupo procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Grupo")
        self.grid1.SetCellValue(fil,4,str(totGrupoItems))
        self.grid1.SetCellValue(fil,5,str(totGrupoPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1
        #al finalizar, debe mostrarse subtotal del ultimo rubro procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Rubro")
        self.grid1.SetCellValue(fil,4,str(totRubroItems))
        self.grid1.SetCellValue(fil,5,str(totRubroPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,4,str(totGeneralItems))
        self.grid1.SetCellValue(fil,5,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()

    def procesarProveedorColor(self,datos):
        totProveedorItems = 0
        totProveedorPesos = Decimal("0.00")
        totGeneralItems = 0
        totGeneralPesos = Decimal("0.00")

        fil = 0
        
        proveedor = ""
        try:
            idproveedorAnt = str(datos[0]["idproveedor"])
            proveedor = datos[0]["nombreproveedor"]+" / "+idproveedorAnt
        except:
            print "ERROR: no pudo establecerse proveedor inicial"
        
        for item in datos:
            #rubro,grupo,talle,cantidad,pesos
            idproveedor = str(item["idproveedor"])
            color = str(item["color"])
            
            cantidad = str(item["cantidad"])
            pesos = str(item["pesos"])

            if idproveedorAnt != idproveedor:
                #cambia rubro y debo mostrar subtotales grupo
                self.grid1.SetCellValue(fil,1,"- Subtotal Proveedor")
                self.grid1.SetCellValue(fil,2,str(totProveedorItems))
                self.grid1.SetCellValue(fil,3,str(totProveedorPesos))
                self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                totProveedorItems = 0
                totProveedorPesos = Decimal("0.00")
                self.grid1.AppendRows()
                fil+= 1
                idproveedorAnt = idproveedor
                proveedor = item["nombreproveedor"]+" / "+idproveedor

            totProveedorItems+= int(cantidad)
            totProveedorPesos+= Decimal(pesos).quantize(Decimal("0.10"))
            totGeneralItems+= int(cantidad)
            totGeneralPesos+= Decimal(pesos).quantize(Decimal("0.10"))

            self.grid1.SetCellValue(fil,0,proveedor)
            self.grid1.SetCellValue(fil,1,color)
            self.grid1.SetCellValue(fil,2,cantidad)
            self.grid1.SetCellValue(fil,3,pesos)
            self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            fil+= 1

            proveedor = ""

        #al finalizar, debe mostrarse subtotal del ultimo grupo procesado
        self.grid1.SetCellValue(fil,1,"- Subtotal Proveedor")
        self.grid1.SetCellValue(fil,2,str(totProveedorItems))
        self.grid1.SetCellValue(fil,3,str(totProveedorPesos))
        self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.AppendRows()
        fil+= 1

        self.grid1.SetCellValue(fil,0,"TOTALES")
        self.grid1.SetCellValue(fil,2,str(totGeneralItems))
        self.grid1.SetCellValue(fil,3,str(totGeneralPesos))
        self.grid1.SetCellAlignment(fil,2, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.grid1.SetCellAlignment(fil,3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
        self.ajusteGrilla()

